package com.example.demo.leetcode.jianzhi;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @author xujimou
 * @version 2.0
 * @Description
 *
 * 地上有一个m行n列的方格，从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动，
 *   它每次可以向左、右、上、下移动一格（不能移动到方格外）
 * ，也不能进入行坐标和列坐标的数位之和大于k的格子。例如，当k为18时，机器人能够进入方格 [35, 37] ，
 * 因为3+5+3+7=18。但它不能进入方格 [35, 38]，因为3+5+3+8=19。请问该机器人能够到达多少个格子？
 *
 *  
 *
 * 示例 1：
 *
 * 输入：m = 2, n = 3, k = 1
 * 输出：3
 * 示例 2：
 *
 * 输入：m = 3, n = 1, k = 0
 * 输出：1
 * 提示：
 *
 * 1 <= n,m <= 100
 * 0 <= k <= 20
 *
 *
 * @date 2021/7/13 17:35
 */
public class Integer_机器人运动范围 {

    public static int movingCount(int m, int n, int k) {

        Set<String> set =new HashSet<String>();
        process(0,0,m,n,k,set);
        return set.size();
    }


    public static void process(int i, int j, int m, int n, int k, Set<String> res){

        if(i<0 || i>=m || j<0 || j>=n || transfer(i)+transfer(j) > k || res.contains(i+","+j)){
            return;
        }
        res.add(i+","+j);
        process(i+1,j,m,n,k,res);
        process(i-1,j,m,n,k,res);
        process(i,j+1,m,n,k,res);
        process(i,j-1,m,n,k,res);

    }
    public static int transfer(int x){
        int a = 0;
        while(x / 10 > 0){
            a += x%10;
            x = x / 10;
        }
        a +=x;
        return a;

    }

    public static void main(String[] args) {
        System.out.println(movingCount(2,3,1));
    }


}
